home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / BG_SRC.ZIP / BG_MESG.C < prev    next >
C/C++ Source or Header  |  1993-02-05  |  11KB  |  357 lines

  1. /*
  2.  *                        B G _ M E S G . C
  3.  * This module handles multi language message printing.
  4.  * O.F.Ransen:    18th October 1991
  5.  * This version:  30th January 1993
  6.  */
  7.  
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>   /* For rand function */
  11. #include <conio.h>
  12. #include <string.h>
  13. #include <dos.h>      /* For 'sound' and 'delay' */
  14. #include "lang.h"
  15. #include "bg.h"
  16.  
  17. /****************************************************************************/
  18.  
  19. #define HELP_AREA    1   /* A single line at the bottom of the screen  */
  20. #define SIDE_AREA    2   /* Block of text on right of screen */
  21. #define GRAF_AREA    3   /* Anywhere on the screen in graphics mode */
  22. #define TEXT_AREA    4   /* Anywhere on the screen in text mode */
  23. #define CFRAME_AREA  5   /* A central frame area */
  24.  
  25. extern Disp_Cfg_t Disp_Cfg ;
  26.  
  27. #if ITALIAN_REL
  28. short Lang = ITA_LANG ;
  29. #elif ENGLISH_REL
  30. short Lang = ENG_LANG ;
  31. #else
  32. Force an error
  33. #endif
  34.  
  35. Mesg_t Messages[N_MESGS] = {
  36.     /* 01234567890 */
  37.     {{"STATISTICS ","STATISTICHE"},       /* STAT_MSG */
  38.       SIDE_AREA, 1,2,0,PUSH},
  39.  
  40.     {{"RED    WHITE","ROSSO BIANCO"},     /* ID_MSG */
  41.       SIDE_AREA, ID_ROW,0,0,PUSH},
  42.  
  43.     {{"  TOTALS   ","  TOTALI   "},          /* TOTAL_MSG */
  44.       SIDE_AREA, TOTALM_ROW,0,0,PUSH},
  45.  
  46.     {{" DOUBLES   ","   DOPPI   "},          /* DOUBLE_MSG */
  47.       SIDE_AREA, DOUBM_ROW,0,0,PUSH},
  48.  
  49.     {{"  POINTS   ","   PUNTI   "},          /* POINTS_MSG */
  50.       SIDE_AREA, POINTSM_ROW,0,0,PUSH},
  51.  
  52.     {{"F10=MAIN MENU","F10=MENU PRINCIPALE"}, /* HELP_MSG */
  53.       HELP_AREA,0,0,0,PUSH},
  54.  
  55.     {{"LEFT MOUSE BUTTON (F10=MAIN MENU...)",  /* HIT_MOUSE_MSG */
  56.       "BOTTONE SINISTRA (F10=MENU PRINCIPALE...)"},
  57.       HELP_AREA,0,0,0,PUSH},
  58.  
  59.     {{"SETUP",                               /* SETUP_MSG */
  60.       "SETUP"},
  61.       GRAF_AREA,S_TITLE_ROW,SETUP_COL,0,PUSH},
  62.  
  63.     /* These are main menu titles... */
  64.  
  65.     {{"F3    = SETUP",  "F3    = SETUP"},
  66.      GRAF_AREA,MAIN_MENU_ROW,MAIN_MENU_COL,0,PUSH},
  67.  
  68.     {{"ENTER = PLAY",  "INVIO = GIOCA"},
  69.      GRAF_AREA,MAIN_MENU_ROW+1,MAIN_MENU_COL,0,PUSH},
  70.  
  71.     {{"ESC   = EXIT",   "ESC   = USCIRE"},
  72.      GRAF_AREA,MAIN_MENU_ROW+2,MAIN_MENU_COL,0,PUSH},
  73.  
  74.     {{"USE CURSOR KEYS, ENTER TO ACCEPT, ESC TO ABANDON",
  75.       "USARE TASTI CURSORI , INVIO , ESC"},
  76.        HELP_AREA,0,0,0,PUSH},
  77.  
  78.     /* These are the playing instructions... */
  79.  
  80.     {{"YOU CANNOT MOVE FROM THIS POINT",  /* CANT_START_MSG */
  81.       "NON POI COMINCARE DA QUA"},
  82.       HELP_AREA,0,0,300,PUSH},
  83.  
  84.     {{"YOU CANNOT MOVE TO THIS POINT",    /* CANT_END_MSG */
  85.       "NON POI FINIRE QUA"},
  86.        HELP_AREA,0,0,333,PUSH},
  87.  
  88.     {{"SELECT START POINT (ESC=REDO F10=END)",       /* SEL_STA_MSG */
  89.       "SELEZIONARE PUNTO DI PARTENZA (ESC=RIFARE, F10=USCIRE)"},
  90.        HELP_AREA,0,0,0,PUSH},
  91.  
  92.     {{"SELECT END POINT (ESC=REDO F10=END)",                 /* SEL_END_MSG */
  93.       "SELEZIONARE PUNTO DI ARRIVO (ESC=RIFARE, F10=USCIRE)"},
  94.        HELP_AREA,0,0,0,PUSH},
  95.  
  96.     {{"CLICK AGAIN TO GO, ESC=RETRY, F10=QUIT",  /* CLK_GO_MSG */
  97.       "CLICK PER CONFERMARE, ESC=RIFARE, F10=USCIRE"},
  98.        HELP_AREA,0,0,0,PUSH},
  99.  
  100.     {{"RED CANNOT MOVE...",  /* B_NOGO_MSG */
  101.       "ROSSO E\' BLOCCATO..."},
  102.        HELP_AREA,0,0,0,PUSH},
  103.  
  104.     {{"WHITE CANNOT MOVE...",  /* W_NOGO_MSG */
  105.       "BIANCO E\' BLOCCATO"},
  106.        HELP_AREA,0,0,0,PUSH},
  107.  
  108.     {{"ESC TO EXIT...",        /* CTLC_MSG */
  109.       "ESC PER USCIRE..."},
  110.        HELP_AREA,0,0,0,PUSH},
  111.  
  112.     {{"INPUT INITIAL DICE (1...6, ENTER=ACCEPT, BACKSPACE=CHANGE)",  /* INIT_DICE_MSG */
  113.       "INSERIRE PRIMI DADI (1...6, INVIO=ACCETTARE, CANCELLA=CAMBIARE)"},
  114.        HELP_AREA,0,0,0,PUSH},
  115.  
  116.     /* 0123456789012345678901234567890123456789012345678901234567890123 */
  117.  
  118.     {{"INPUT DICE (1...6, ENTER=ACCEPT, BACKSPACE=CHANGE, ESC=CLEAR)",  /* THROW_DICE_MSG */
  119.       "INSERIRE DADI (1..6, INVIO=ACCETTARE, CANC=CAMBIARE)"},
  120.        HELP_AREA,0,0,0,PUSH},
  121.  
  122.     {{"HIT A KEY TO CONTINUE",  /* HAKTOC_MSG */
  123.       "PREMERE QUALSIASI TASTO"},
  124.        TEXT_AREA,0,0,0,PUSH},
  125.  
  126.     {{"CLICK ON CENTRAL D TO DOUBLE ANYWHERE ELSE TO THROW",  /* DBL_MSG */
  127.       "CLICKARE (SUL D CENTRALE PER RADDOPPIARE)"},
  128.        HELP_AREA,0,0,0,PUSH},
  129.  
  130.     {{"DOUBLING BEYOND 32 NOT ALLOWED",  /* DBL_LIM_MSG */
  131.       "NON SI PUO RADDOPIARE OLTRE 32"},
  132.        HELP_AREA,0,0,0,PUSH},
  133.  
  134.     {{"CLICK ON CENTRAL D TO ACCEPT DOUBLE",   /* ACC_DBL_MSG */
  135.       "CLICKARE SUL D CENTRALE PER ACCETTARE"},
  136.        HELP_AREA,12,0,0,PUSH},
  137.  
  138.     {{"COMPUTER REJECTS DOUBLE",   /* COM_REJ_MSG */
  139.       "IL COMPUTER NON ACCETTA IL RADDOPPIO"},
  140.        CFRAME_AREA,12,0,0,PUSH},
  141.  
  142.     {{"COMPUTER ACCEPTS DOUBLE",   /* COM_ACC_MSG */
  143.       "IL COMPUTER ACCETTA IL RADDOPPIO"},
  144.        CFRAME_AREA,12,0,0,PUSH},
  145.  
  146.     {{"COMPUTER DOUBLES, DO YOU ACCEPT?",   /* YOU_ACC_MSG */
  147.       "IL COMPUTER RADDOPPIA, ACCETTI?"},
  148.        CFRAME_AREA,12,0,0} ,
  149.  
  150.     {{"WHITE DOUBLES...",   /* WHT_PROP_DBL_MSG */
  151.       "BIANCO RADDOPPIA..."},
  152.        CFRAME_AREA,11,0,0,PUSH},
  153.  
  154.     {{"RED DOUBLES...",   /* BLK_PROP_DBL_MSG */
  155.       "ROSSO RADDOPPIA..."},
  156.        CFRAME_AREA,11,0,0,PUSH},
  157.  
  158.     {{"WHITE REJECTS DOUBLE",   /* WHT_REJ_DBL_MSG */
  159.       "BIANCO NON ACCETTA IL RADDOPPIO"},
  160.        CFRAME_AREA,13,0,0,PUSH},
  161.  
  162.     {{"RED REJECTS DOUBLE",   /* BLK_REJ_DBL_MSG */
  163.       "ROSSO NON ACCETTA IL RADDOPPIO"},
  164.        CFRAME_AREA,13,0,0,PUSH},
  165.  
  166.     {{"WHITE ACCEPTS DOUBLE",   /* WHT_ACC_DBL_MSG */
  167.       "BIANCO ACCETTA IL RADDOPPIO"},
  168.        CFRAME_AREA,13,0,0,PUSH},
  169.  
  170.     {{"RED ACCEPTS DOUBLE",   /* BLK_ACC_DBL_MSG */
  171.       "ROSSO ACCETTA IL RADDOPPIO"},
  172.        CFRAME_AREA,13,0,0,PUSH},
  173.  
  174.     {{"NO DOUBLING IN NEXT MATCH",   /* NO_CUBE_MSG */
  175.       "CUBO DI RADDOPPIO CONGELATO"},
  176.        CFRAME_AREA,14,0,0,PUSH},
  177.  
  178.     {{"-       -",   /* PLAY_TO_MSG */
  179.       "-       -"},
  180.       SIDE_AREA, TARGETM_ROW,0,0,PUSH},
  181.  
  182.     {{"THE COMPUTER HAS WON",   /* COM_WINS_SET_MSG */
  183.       "IL COMPUTER HA VINTO"},
  184.        CFRAME_AREA,9,0,0,PUSH},
  185.  
  186.     {{"YOU HAVE WON",   /* YOU_WIN_SET_MSG */
  187.       "TU HAI VINTO"},
  188.        CFRAME_AREA,9,0,0,OVERWRITE}
  189. } ;
  190.  
  191.  
  192. /****************************************************************************/
  193.  
  194. void Print_Message (ushort m)
  195. /*
  196. PURPOSE: To print a message in the correct language in the correct area
  197.          at the correct position.
  198. */
  199. {
  200.     if (m >= N_MESGS) {
  201.         Error_Exit ("Bad m in Print_Message") ;
  202.     }
  203.     if (Messages[m].Sound != 0) { /* There is a sound */
  204.         sound (Messages[m].Sound) ;
  205.         delay (333) ;
  206.     }
  207.     switch (Messages[m].Area) {
  208.         case HELP_AREA:
  209.         Clear_Help_Line () ;
  210.         Help_Text (Messages[m].Col,Messages[m].Message[Lang],WHITE) ;
  211.         break ;
  212.         case SIDE_AREA:
  213.             Side_Text (Messages[m].Row,Messages[m].Col,
  214.                        Messages[m].Message[Lang],WHITE) ;
  215.             break ;
  216.         case GRAF_AREA:
  217.             Graf_Text (Messages[m].Row,Messages[m].Col,
  218.                        Messages[m].Message[Lang],GREY) ;
  219.             break ;
  220.         case TEXT_AREA :
  221.             printf (Messages[m].Message[Lang]) ;
  222.             break ;
  223.         case CFRAME_AREA :
  224.             Framed_Center_String (Messages[m].Message[Lang],
  225.                                   Messages[m].Row,Messages[m].Op) ;
  226.             if (Messages[m].Op == PUSH) {
  227.                 Seconds_Delay (2) ;
  228.                 Erase_Framed_String () ;
  229.             }
  230.             break ;
  231.         default:
  232.             Error_Exit ("Bad Area in Print_Message") ;
  233.             break ;
  234.     }
  235.     nosound () ;
  236. }
  237.  
  238. /****************************************************************************/
  239.  
  240. static char Human_Name[N_LANGS][SIDE_COLS] = {"YOU","TU"} ;
  241.  
  242. static char Colour_Strings [N_LANGS][2][8] =
  243.      {{"RED","WHITE"},
  244.       {"ROSSO","BIANCO"}} ;
  245.  
  246. extern String_Menu_t Setup_Menu [N_SETUP_FIELDS] ;
  247.  
  248. void Print_Players (short Opponent, Player_t Human)
  249. /*
  250. PURPOSE: To print the name of the opponent we are playing against.
  251. Human will be either BLACK_PLAYER or WHITE_PLAYER, Opponent will be
  252. one of the computer opponents.
  253. */
  254. {
  255.     char Temp [SIDE_COLS] ;
  256.     short c ;
  257.  
  258.     for (c = 0 ; c < SIDE_COLS ; c++) {
  259.         Side_Text (OPP_ROW,c," ",WHITE) ;
  260.     }
  261.  
  262.     if (Human == BLACK_PLAYER) {
  263.         (void)strcpy (Temp,Human_Name[Lang]) ;
  264.         (void)strcat (Temp,"  ") ;
  265.         (void)strcat (Temp,Setup_Menu[OPP_FIELD].Options[Lang][Opponent]) ;
  266.     } else {
  267.         (void)strcpy (Temp,Setup_Menu[OPP_FIELD].Options[Lang][Opponent]) ;
  268.         (void)strcat (Temp,"  ") ;
  269.         (void)strcat (Temp,Human_Name[Lang]) ;
  270.     }
  271.     Side_Text (OPP_ROW,0,Temp,WHITE) ;
  272. }
  273.  
  274. /****************************************************************************/
  275.  
  276. void Print_Opponents (short Black, Player_t White)
  277. /*
  278. PURPOSE: To print the name of the opponent we are playing against.
  279. Human will be either BLACK_PLAYER or WHITE_PLAYER, Opponent will be
  280. one of the computer opponents.
  281. */
  282. {
  283.     char Temp [SIDE_COLS+1] ;
  284.     short c ;
  285.  
  286.     for (c = 0 ; c < SIDE_COLS ; c++) {
  287.         Side_Text (OPP_ROW,c," ",WHITE) ;
  288.     }
  289.  
  290.     (void)strcpy (Temp,Setup_Menu[OPP_FIELD].Options[Lang][Black]) ;
  291.     (void)strcat (Temp," ") ;
  292.     (void)strcat (Temp,Setup_Menu[OPP_FIELD].Options[Lang][White]) ;
  293.  
  294.     Side_Text (OPP_ROW,0,Temp,WHITE) ;
  295. }
  296.  
  297. /****************************************************************************/
  298.  
  299. void Print_Tournament (short T_Num, short Pos[N_OPPS])
  300. /*
  301. PURPOSE: To print the tournament number and present classification
  302. of the players.
  303. */
  304. {
  305.     #define T_NUM_ROW (Disp_Cfg.Text_Rows-SIDE_ROWS-N_OPPS-2)
  306.     #define T_COL     (Disp_Cfg.Text_Cols-SIDE_COLS)
  307.     char Str [SIDE_COLS+1] ;
  308.     short o ;
  309.  
  310.     /* Print the tournament number */
  311.     sprintf (Str,"T: %2d",T_Num) ;
  312.     Graf_Text (T_NUM_ROW,T_COL,Str,WHITE) ;
  313.  
  314.     /* Print the players in order of classification */
  315.     for (o = 0 ; o < N_OPPS ; o++) {
  316.         Graf_Text (T_NUM_ROW+1+Pos[o],T_COL,
  317.                    Setup_Menu[OPP_FIELD].Options[Lang][o],WHITE) ;
  318.     }
  319. }
  320.  
  321. /****************************************************************************/
  322.  
  323. static char Win_Types [N_LANGS][4][60] =
  324.   {{"NO_WIN",
  325.     " WINS A SINGLE GAME (1 x %d = %d POINTS)",
  326.     " WINS A GAMMON (2 x %d = %d POINTS)",
  327.     " WINS A BACKGAMMON (3 x %d = %d POINTS)"},
  328.    {"NO_WIN",
  329.     " VINCE 1 x %d = %d PUNTI (SEMPLICE)",
  330.     " VINCE 2 x %d = %d PUNTI (GAMMON)",
  331.     " VINCE 3 x %d = %d PUNTI (BACKGAMMON)"}} ;
  332.  
  333.  
  334. void Show_Winner (Player_t Winner, Player_t Human, short Points)
  335. /*
  336. PURPOSE: To draw a string in the middle of the screen saying who
  337.          won how many points.
  338. */
  339. {
  340.     char Win_Str [64] ;
  341.     char Dummy [64] ;
  342.     extern int Double_Value ;
  343.  
  344.     (void)strcpy (Win_Str,Colour_Strings[Lang][Winner]);  /* RED */
  345.  
  346.     (void)sprintf (Dummy,Win_Types[Lang][Points],Double_Value,Double_Value*Points) ;
  347.  
  348.     if (Human != NULL_PLAYER) {
  349.         (void)strcat (Win_Str,Dummy) ;  /* RED WINS...*/
  350.         Framed_Center_String (Win_Str,12,PUSH) ;
  351.         Seconds_Delay (3) ;
  352.         Erase_Framed_String () ;
  353.     }
  354. }
  355.  
  356. /****************************************************************************/
  357.